import { HvigorNode, HvigorPlugin, hvigor, FileUtil } from "@ohos/hvigor";
import { OhosHapContext, OhosPluginId, Target } from '@ohos/hvigor-ohos-plugin';

import fs from "node:fs";
import {readFileSync} from "node:fs";
// import {existsSync, mkdirSync, writeFileSync} from "fs";

// 实现自定义插件, 系统会根据当前引入hvigor的文件位置来查找node,所以必须传进来
// 在插件库文件中，引入FileUtil，得到的是undefined， 需要从外部传入才行

// export function JJRouterAppTaskPlugin(hvigor: Hvigor, FileUtil: Class, autoRuntimeConfig?: boolean = true): HvigorPlugin {
export function JJRouterAppTaskPlugin(autoRuntimeConfig?: boolean = true): HvigorPlugin {
    return {
        pluginId: 'JJRouterAppTask',
        async apply(currentNode: HvigorNode): Promise<void> {

            console.log("┌────────────────────────────────────────────────────────────────────────")
            console.log(FileUtil)
            console.log(hvigor)
            console.log("└────────────────────────────────────────────────────────────────────────")

          // 等待全部节点加载完成之后获取子节点信息
          hvigor.nodesEvaluated(async () => {
              console.log("┌────────────────────────────────────────────────────────────────────────")
              console.log("11111111111111111111")
              console.log("└────────────────────────────────────────────────────────────────────────")
            // 注册模块级任务
              _hapTaskHock(currentNode, FileUtil, autoRuntimeConfig);
          });
        }
    };
}

// 在每一个Hap中注册任务
function _hapTaskHock(currentNode: HvigorNode, FileUtil: Class, autoRuntimeConfig: boolean) {
    // 等待全部节点加载完成之后获取子节点信息
    currentNode.subNodes((node: HvigorNode) => {

        console.log("┌────────────────────────────────────────────────────────────────────────")
        console.log("222222222222222222222")
        console.log("└────────────────────────────────────────────────────────────────────────")
        // 获取hap模块上下文信息
        const hapContext = node.getContext(OhosPluginId.OHOS_HAP_PLUGIN) as OhosHapContext;
        // 获取target,并在此target的任务节点中注册任务
        hapContext?.targets((target: Target) => {
            const targetName = target.getTargetName();
            // const outputPath = target.getBuildTargetOutputPath();

            console.log("┌────────────────────────────────────────────────────────────────────────")
            console.log("3333333333333333333")
            console.log("└────────────────────────────────────────────────────────────────────────")

            node.registerTask({
                // 任务名称
                name: `${targetName}@JJRouterHapTask`,
                // 任务执行逻辑主体函数
                run() {

                    console.log("┌────────────────────────────────────────────────────────────────────────")
                    console.log("444444444444444444")
                    console.log("└────────────────────────────────────────────────────────────────────────")
                    _statementRouterInAbility(node, FileUtil, autoRuntimeConfig)
                },
                // 配置前置任务依赖
                dependencies: [`${targetName}@CreateBuildProfile`],
                // // 配置任务的后置任务依赖
                postDependencies: [`${targetName}@CompileArkTS`]
            });
        });
    });
}


function _statementRouterInAbility(node: HvigorNode, FileUtil: Class, autoRuntimeConfig: boolean) {
    if (autoRuntimeConfig) {
        // const buildProfileFilePath = moduleFile.file('build-profile.json5')?.filePath;
        _readModuleDependencies(node, FileUtil)
    }
}

function _readModuleDependencies(node: HvigorNode, FileUtil: Class) {
    const packageFile = node.nodeDir.file('oh-package.json5');
    if (packageFile == undefined) {
        console.log("The file 'oh-package.json5' does not exist")
        return
    }

    const packageInfo = FileUtil.readJson5(packageFile)

    console.log("┌────────────────────────────────────────────────────────────────────────")
    console.log(packageInfo['dependencies'])
    console.log("└────────────────────────────────────────────────────────────────────────")

}



